package javaBasic.javaSE1.Multi_learn;

/*
代码当中提现多态性，其实就是一句话：
    父类引用指向子类对象。
    接口引用指向实现类对象。
格式：
父类名称 对象名 = new 子类名称();
或者：
接口名称 对象名 = new 实现类名称();

访问成员变量的两种方式：
1、直接通过对象名称访问成员变量：看等号左边是谁，优先用谁，没有则向上找。
2、间接通过成员方法访问成员变量：看该方法属于谁，优先用谁，没有则向上找。

在多态的代码党总，成员方法的访问规则是：
    看new的是谁，就优先用谁，没有则向上找。
口诀：编译看左边，运行看右边。

对比一下：
成员变量：编译看左边，运行看左边。
成员方法：编译看左边，运行看右边。


***********
使用多态的好处
    接口衍生出多态，接口就是为了提供统一的规则，既然要统一，那方法也要统一，这时使用多态就可以用统一的方法指向实际的引用
***********

1、对象的向上转型，其实就是多态写法：
格式：父类名称 对象名 = new 子类名称();
含义：右侧创建一个子类对象，把它当作父类来看待使用。
注意事项：向上转型一定是安全的。从小范围转向了大范围，

2、对象的向下转型，其实是一个【还原】的动作。
格式：子类名称 对象名 = (对象名称)父类对象；
含义：将父类对象，【还原】成为本来的子类对象。

注意事项：
a、必须保证对象本来创建的时候就是猫，才能向下转型成为猫。
b、如果对象创建的时候本来不是猫，现在非要向下转型成为猫，就会报错。
类似于： int num = (int)10.0 //可以
        int num = (int)10.5 //不可以，精度损失


如何知道一个父类引用的对象，本来是什么子类？
格式：
对象 instanceof 类型
这将会得到一个boolean值结果，也就是判断前面的对象能不能当作后面类型的实例。

 */

public class Demo01 {
}
